package com.papercutting.platform.service;

import com.papercutting.platform.dto.request.ChangePasswordRequest;
import com.papercutting.platform.dto.request.LoginRequest;
import com.papercutting.platform.dto.request.ProfileUpdateRequest;
import com.papercutting.platform.dto.request.UserCreateRequest;
import com.papercutting.platform.dto.request.UserUpdateRequest;
import com.papercutting.platform.dto.request.WechatLoginRequest;
import com.papercutting.platform.dto.response.LoginResponse;
import com.papercutting.platform.dto.response.UserResponse;

/**
 * 认证服务接口
 */
public interface AuthService {
    
    /**
     * 用户名密码登录
     * 
     * @param request 登录请求
     * @return 登录响应（包含token和用户信息）
     */
    LoginResponse login(LoginRequest request);
    
    /**
     * 微信登录
     * 
     * @param request 微信登录请求
     * @return 登录响应（包含token和用户信息）
     */
    LoginResponse wechatLogin(WechatLoginRequest request);
    
    /**
     * 用户注册
     * 
     * @param request 注册请求
     * @return 注册后的登录响应
     */
    LoginResponse register(UserCreateRequest request);
    
    /**
     * 根据token获取用户信息
     * 
     * @param token JWT token
     * @return 用户信息
     */
    UserResponse getUserInfoByToken(String token);
    
    /**
     * 更新当前用户信息
     *
     * @param token JWT token
     * @param request 更新请求
     * @return 更新后的用户信息
     */
    UserResponse updateCurrentUser(String token, UserUpdateRequest request);

    /**
     * 更新个人资料
     *
     * @param token JWT token
     * @param request 个人资料更新请求
     * @return 更新后的用户信息
     */
    UserResponse updateProfile(String token, ProfileUpdateRequest request);

    /**
     * 修改密码
     *
     * @param token JWT token
     * @param request 修改密码请求
     */
    void changePassword(String token, ChangePasswordRequest request);

    /**
     * 刷新token
     *
     * @param refreshToken 刷新token
     * @return 新的登录响应
     */
    LoginResponse refreshToken(String refreshToken);

    /**
     * 登出
     *
     * @param token JWT token
     */
    void logout(String token);
}